const mongoose = require("./index");
const moment = require("moment");

const PermissionsSchema = new mongoose.Schema(
	{
		// 父id
		pid: {
			type: mongoose.Schema.Types.ObjectId,
		},
		// 权限类型
		type: {
			type: String,
			enum: ["catalogue", "menu", "resource"], // 目录 | 菜单 | 其它资源(接口...)
			required: [true, "权限类型不能为空"],
		},

		// 权限标识: 除了(type===catalogue)不需要传递,其它type都应该传递.
		key: {
			type: String,
			unique: [true, "key属性不能重复"],
			default: Date.now,
		},
		// 权限展示名称: 所有的权限都应该传递该属性.
		permission_name: {
			type: String,
			required: [true, "权限展示名称不能为空"],
		},
		// vueRouter中需要配置的name属性: 除了(type===resource)不需要传递.
		name: {
			type: String,
			unique: [true, "name属性不能重复"],
			default: Date.now,
		},
		// vueRouter中需要配置的path属性: 只有(type===resource)不需要传递.
		path: {
			type: String,
		},
		// vueRouter中需要配置的component属性: 只有(type===resource)不需要传递.
		component: {
			type: String,
		},
		// 菜单是否隐藏: 会将该路由返回给前端,前端不会渲染它,但是依旧可以通过path跳转访问该路由.
		hidden: {
			type: Boolean,
			default: false,
		},
		// 状态: 禁用状态下, 不会将该权限返回给前端.
		status: {
			type: String,
			enum: ["enable", "disable"],
			default: "enable",
		},

		// 菜单是否缓存
		keepAlive: {
			type: Boolean,
			default: false,
		},

		// 菜单是否外链
		isLink: {
			type: Boolean,
			default: false,
		},
		// 外链地址
		url: {
			type: String,
		},

		// 菜单的排序
		sort: {
			type: Number,
		},
		// 目录及菜单的图标
		icon: {
			type: String,
		},
	},
	{ timestamps: true }
);

module.exports = mongoose.model("Permissions", PermissionsSchema);
